﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MaquinaJMG.GUI.Contrato;
using Logica.Comandos;
using Datos.Entidades;
using Logica.FabricaLogica;
using Datos.Entidades.FabricaEntidades;
using Subgurim.Controles;
using Logica.Fabricas;

namespace MaquinaJMG.GUI.Presentador
{
    public class PresentadorModificarMaquina
    {
        double lat, lng;
        private IContratoModificarMaquina _vista;

        
        /// <summary>
        /// Constructor que inicializa el atributo vista
        /// </summary>
        /// <param name="vista">Objeto de tipo Interfaz</param>
        public PresentadorModificarMaquina(IContratoModificarMaquina vista)
        {
            
            this._vista = vista;
         
        }
        Entidad laMaquina = new Entidad();


        public void llenarCampos()
    {
        _vista.Pais.Text = (laMaquina as Maquina).IdMaquina.ToString();
        _vista.NombreLocal.Text = (laMaquina as Maquina).NombreLocal;
        _vista.Estado.Text = (laMaquina as Maquina).Estado;
        _vista.Telefono.Text = (laMaquina as Maquina).Telefono;
        _vista.Ciudad.Text = (laMaquina as Maquina).Ciudad;
        _vista.Correo.Text = (laMaquina as Maquina).Piso;
        _vista.Calle.Text = (laMaquina as Maquina).Calle;
        if ((laMaquina as Maquina).Estatus1==1)
            _vista.NumeroLocal.SelectedIndex = 0;
        else
            _vista.NumeroLocal.SelectedIndex = 1;
    }




        /// <summary>
        /// Metodo que hace la asignación de valores para la generación del mapa y el pin
        /// </summary>
        public void CargarMapa()
        {
            Comando comando2 = FabricaComandoMaquina.CrearComandoBuscarMaquina(int.Parse(_vista.id));
            comando2.Ejecutar();
            laMaquina = comando2.Entidad;
            Double lat = (Double)(laMaquina as Maquina).Latitud;
            Double lng = (Double)(laMaquina as Maquina).Longitud;

            GLatLng coordenadas = new GLatLng(lat, lng);
            GMap mapa = ObtenerMapa(lat, lng);
            Comando comando = FabricaComandoGoogleMap.ObtenerComandoPropPinGoogleMap(true);
            comando.Ejecutar();
            //Configuración del pin en el mapa
            GMarkerOptions prop = comando.GMa; // FabricaComandoGoogleMap.ObtenerComandoPropPinGoogleMap(true)

            GLatLng coordenadas2 = new GLatLng((Double)(laMaquina as Maquina).Latitud, (Double)(laMaquina as Maquina).Longitud);
            GMarker pin = new GMarker(coordenadas2, prop);

            GInfoWindow window = new GInfoWindow(pin, "<b>Nombre Local: </b>" + (laMaquina as Maquina).NombreLocal + ". <br><b>Dirección:</b>" + (laMaquina as Maquina).Estado + ", " + (laMaquina as Maquina).Ciudad + "<br>" + (laMaquina as Maquina).Calle + "<br>"
                + ". <br><b>Teléfono:</b> " + (laMaquina as Maquina).Telefono + ". <br><b>Mail:</b> " + (laMaquina as Maquina).Piso, true);

            mapa.addInfoWindow(window);
            // Activa el listener para el evento de arrastre del pin en el mapa
            mapa.addListener(new GListener(pin.ID, GListener.Event.dragend,
             string.Format(@"
               function(overlay, point)
               {{
                  var ev = new serverEvent('Arrastre', {0});
                  ev.addArg(this.getPoint());
                  ev.send();
               }}
               ", mapa.GMap_Id)));




        }



        public string ClickAceptar(GLatLng puntero)
        {
            if (puntero != null)
            {
                lat = puntero.lat;
                lng = puntero.lng;
            }
            else
            {
                Comando comando2 = FabricaComandoMaquina.CrearComandoBuscarMaquina(int.Parse(_vista.id));
                comando2.Ejecutar();
                laMaquina = comando2.Entidad;
                lat = (Double)(laMaquina as Maquina).Latitud;
                lng = (Double)(laMaquina as Maquina).Longitud;

            }

            Entidad maquina = FabricaEntidades.ObtenerMaquina();
            (maquina as Maquina).NombreLocal = _vista.NombreLocal.Text;
            (maquina as Maquina).Ciudad = _vista.Ciudad.Text;
            (maquina as Maquina).Estado = _vista.Estado.Text;
            if(_vista.NumeroLocal.SelectedIndex==0)
                (maquina as Maquina).Estatus1 =1 ;
            else
                (maquina as Maquina).Estatus1 = 0;
            (maquina as Maquina).Calle = _vista.Calle.Text;
            (maquina as Maquina).Altitud = "0";
            (maquina as Maquina).Telefono = _vista.Telefono.Text;
            (maquina as Maquina).Latitud = (decimal)lat;
            (maquina as Maquina).Longitud = (decimal)lng;
            (maquina as Maquina).Piso = _vista.Correo.Text;
            (maquina as Maquina).IdMaquina =int.Parse(_vista.Pais.Text);



            Comando comando = FabricaComandoMaquina.CrearComandoModificarMaquina(maquina);
            comando.Ejecutar();
            if (!comando.Flag)
                return "No se ha podido crear la maquina!";
            else

                return "La maquina fue creado con éxito!";
        }

        /// <summary>
        /// Metodo que genera el mapa configurando sus controles gráficos
        /// </summary>
        /// <param name="lat">Latitud en el Mapa</param>
        /// <param name="lng">Longitud en el Mapa</param>
        /// <returns></returns>
        private GMap ObtenerMapa(double lat, double lng)
        {

            GMap mapa = _vista.GoogleMap;
            mapa.Key =
                "ABQIAAAAmOYYhuw49CfNIcF4TCfHchRXA9H1-73k1MkKjp_pA8g760BL1xR0AZhsBh9TY7i6ZDOxRf-Qd09hnA";

            mapa.addControl(new GControl(GControl.preBuilt.MapTypeControl));
            mapa.addControl(new GControl(GControl.preBuilt.MapTypeControl));
            mapa.addControl(new GControl(GControl.preBuilt.LargeMapControl));
            mapa.setCenter(new GLatLng(lat, lng), 13);
            mapa.Width = 400;
            mapa.Height = 300;
            mapa.enableHookMouseWheelToZoom = true;
            mapa.enableGKeyboardHandler = true;
            mapa.enableDoubleClickZoom = true;
            mapa.enableContinuousZoom = true;
            mapa.enableDragging = true;
            mapa.GZoom = 15;

            return mapa;

        }
    }  
}